"""
Python列表是一种有序、可变的数据结构，可以用来存储多个元素。列表中的元素可以是任意类型的对象，包括数字、字符串、布尔值、甚至其他列表等

列表内的每一个数据，称之为元素

    以[]作为标识符
    列表内每一个元素之间，逗号隔开

创建列表的语法是使用方括号 []，并在其中以逗号分隔每个元素。例如：

my_list = [1, 2, 3, "hello", True]

可以使用索引访问列表中的元素，索引从0开始计数。例如：

print(my_list[0])  # 输出 1
print(my_list[3])  # 输出 "hello"


列表还支持负数索引，表示从末尾开始倒数。例如：

print(my_list[-1])  # 输出 True（最后一个元素）
print(my_list[-2])  # 输出 "hello"（倒数第二个元素）

可以使用切片操作符获取子列表。切片操作符由冒号 : 组成，并且可以指定起始索引和结束索引（不包含）。例如：

sub_list = my_list[1:3]   # 获取索引为1和2的元素，结果为 [2, 3]

列表是可变的，这意味着你可以更改它们的内容。常见的操作包括添加、删除和修改元素。

要向列表末尾添加一个元素，请使用 `append()` 方法：


my_list.append(4)   # 往列表末尾添加一个新元素4


要通过索引修改列表中的元素，请直接赋予新值给相应位置上的元素：


my_list[0] = "hi"   # 将第一个元素修改为"hi"


要删除列表中的一个或多个元素，请使用 `del` 关键字或 `remove()` 方法：

del my_list[2]      # 删除索引为2的元素

my_list.remove("hello")   # 删除值为"hello"的第一个出现位置的元素

# 字面量
[元素1,元素2,元素3,...]

# 定义变量
变量名称 = [元素1,元素2,元素3,...]

# 定义空列表
变量名称 = []
变量名称 = list()
"""

# 以[]定义一个列表

name_list = ["ab", "cd", "cd"]
print(name_list)
print(type(name_list))

my_list = ["ab", 666, "cd", "峡谷杨爹", True]
print(my_list)
print(type(my_list))

# 定义一个嵌套列表
my1_list = [[1, 2, 3], [4, 5, 6], name_list]  # [[1, 2, 3], [4, 5, 6], ['ab', 'cd', 'cd']]
print(my1_list)
print(type(my1_list))

# 下标索引取特定位置的数据
print(name_list[0])
print(name_list[1])
print(name_list[2])

print(name_list[-3])
print(name_list[-2])
print(name_list[-1])

print(my1_list[0][0])
print(my1_list[1][1])
print(my1_list[2][2])

print("------------------------------------------常用的操作方法------------------------------------")
mylist = ["峡谷杨爹", "鲁班七号", "xiaguyangdie"]

# 查找某个元素在列表中的下标索引
index = mylist.index("鲁班七号")
print(f"鲁班七号在列表中的下标索引值是：{index}")

# 查找某个元素在列表中的下标索引，如果不存在，则报错
# index = mylist.index("凯爹")
# print(f"凯爹在列表中的下标索引值是：{index}")

# 修改特定下标索引的值
mylist[1] = "ab"
print(f"列表被修改元素后，结果是：{mylist}")

# 在指定下标位置插入新元素:列表.insert(下标, 元素)，在指定的下标位置，插入指定的元素
mylist.insert(1, "best")
print(f"列表插入元素后，结果是：{mylist}")

# 在列表尾部追加单个新元素：列表.append(元素)，将指定元素，追加到列表的尾部
mylist.append("java")
print(f"列表追加元素后，结果是：{mylist}")
# 在列表尾部追加多个新元素：列表.extend（其它数据容器），将其它数据容器的内容取出，依次追加到列表尾部
mylist2 = [1, 2, 3]
mylist.extend(mylist2)
print(f"列表追加元素后，结果是：{mylist}")

# 删除指定下标索引的元素（2种方式）
mylist = ["峡谷杨爹", "鲁班七号", "xiaguyangdie"]
# 方式一：del 列表[下标]
del mylist[2]
print(f"列表删除元素后，结果是：{mylist}")
# 方式二：列表.pop(下标)
mylist = ["峡谷杨爹", "鲁班七号", "xiaguyangdie"]
element = mylist.pop(2)
print(f"通过pop方法取出元素后列表内容：{mylist}，取出的元素是：{element}")

# 删除某元素在列表中的第一个匹配项
mylist = ["峡谷杨爹", "鲁班七号", "xiaguyangdie", "峡谷杨爹", "鲁班七号"]
mylist.remove("峡谷杨爹")
print(f"通过remove方法移除元素后，列表的结果是：{mylist}")

# 清空列表
mylist.clear()
print(f"列表被清空了，列表的结果是：{mylist}")

# 统计列表中某个元素的数量：列表.count(元素)
mylist = ["峡谷杨爹", "鲁班七号", "xiaguyangdie", "峡谷杨爹", "鲁班七号"]
count = mylist.count("峡谷杨爹")
print(f"列表中峡谷杨爹的数量是：{count}")
# 统计列表中全部元素的数量：len(列表)
mylist = ["峡谷杨爹", "鲁班七号", "xiaguyangdie", "峡谷杨爹", "鲁班七号"]
count = len(mylist)
print(f"列表中全部元素的数量是：{count}")

"""
列表的特点：
    可以容纳多个元素
    可以容纳不同类型的元素
    数据是有序存储的
    允许重复数据存在
    可以修改
"""

print("------------------------------------------练习------------------------------------")
# 定义列表
mylist = [21, 25, 23, 22, 20, 20]
# 追加一个元素
mylist.append(31)
# 追加一个新列表
mylist.extend([29, 33, 30])
# 取出第一个元素
num1 = mylist[0]
print(f"从列表中取出的第一个元素应该是21，实际上是：{num1}")
# 取出最后一个元素
num2 = mylist[-1]
print(f"从列表中取出的最后一个个元素应该是30，实际上是：{num2}")
# 查找元素在列表中的下标位置
index = mylist.index(31)
print(f"元素31在列表中的下标位置是：{index}")
print(f"列表最后的内容是：{mylist}")

print("------------------------------------------列表的循环遍历------------------------------------")


def list_while_func():
    """
    使用while循环遍历列表
    :return: None
    """
    mylist = ["峡谷杨爹", "鲁班七号", "xiaguyangdie", "python", "java"]
    index = 0
    while index < len(mylist):
        element = mylist[index]
        print(f"列表的索引：{index}，列表该位置的值：{element}")
        index += 1


def list_for_func():
    """
    使用for循环遍历列表
    :return: None
    """
    mylist = ["峡谷杨爹", "鲁班七号", "xiaguyangdie", "python", "java"]
    index = 0
    for element in mylist:
        print(f"列表的值：{element}")


list_while_func()
list_for_func()

print("------------------------------------------练习：取出列表内的偶数------------------------------------")
mylist = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
mylist2 = []
index = 0
while index < len(mylist):
    if mylist[index] % 2 == 0:
        element = mylist.pop(index)
        mylist2.append(element)
    index += 1
print(mylist2)
